package yangsw87.basic;

import java.util.Scanner;

public class J21_BookDBMain {
	
	// 서비스 클래스, 키보드입력 클래스는
	// 객체 생성없이 바로 사용할 수 있도록
	// static 으로 선언
	private static J21_BookDBDAO srv = new J21_BookDBDAO();
	private static Scanner sc = new Scanner(System.in);
	
	private static final String TITLE = "BookDB 프로그램";
	private static final String MENU = ">>추가(a) 전체조회(b) 조건조회(c) 수정(d) 삭제(e) 끝내기(q)";
	private static final String ADDMSG = "제목,출판사,저자정보 순으로 입력";
	private static final String SELMSG = "조회할 ID 입력";
	private static final String MODMSG1 = "수정할 ID 입력";
	private static final String MODMSG2 = "제목,출판사,저자정보 순으로 입력";
	private static final String DELMSG = "삭제할 id 입력";

	public static void main(String[] args) {
		
		System.out.println(TITLE);
		while(true) {
			System.out.println(MENU);
			
			switch(sc.next()) {
				case "a" :
					newBookDB(sc, srv);
					break;
				case "b" :
					readBookDB(srv);
					break;
				case "c" :
					readOneBookDB(sc, srv);
					break;
				case "d" :
					modifyBookDB(sc, srv);
					break;
				case "e" :
					removeBookDB(sc, srv);
					break;
				case "q" :
					sc.close();
					System.out.println("종료"); // 종료라는 표시와 함께 
					System.exit(0); // 종료를 함
					break;
			}
		}
		
	}
	
	// Main 클래스에서 DAO클래스의 메서드를
		// 직접 호출하는 것은 OOP개념에 다소 위배
		
		// 캡슐화와 보안, 유지보수 관점에서 볼때
		// 서비스 객체를 하나 더 만들어
		// 그것을 통해 DAO클래스의 메서드를 호출하는 것이 더 나음
		
		// 즉, Main -> DAO 보다는
		// Main -> service -> DAO 가 나음
		
		// DAO 클래스의 메서드를 호출하는
		// 서비스 메서드를 static으로 선언

	private static void newBookDB(Scanner sc, J21_BookDBDAO srv) {
		System.out.println(ADDMSG); // 메세지 찍어주고
		
		J21_BookDBVO bvo = new J21_BookDBVO(sc.next(), sc.next(), sc.next());
		// J20_BookDBVO 에서 받아서 새로운 객체를 생성하고
		
		int cnt = srv.insertBookDB(bvo); // srv에 bvo에서 받은 것을 추가해서 반환된 cnt값이 여기에 입혀지고
		if (cnt>0) // 한번 돌았으면 1이 되므로~
			System.out.println("추가성공"); // 추가하면 추가성공이라 하고
		else
			System.out.println("추가실패"); // 실패했으면 추가실패라고 하고
	}

	private static void readBookDB(J21_BookDBDAO srv) {
		System.out.println(srv.selectBookDB()); // 전체 조회 다 보여주고
	}

	private static void readOneBookDB(Scanner sc, J21_BookDBDAO srv) {
		System.out.println(srv.selectBookDB()); // 전체조회를 다 보여주고
		System.out.println(SELMSG); // 메세지 찍어주고
		String id = sc.next(); // 상세조회할 id값 입력받고
		System.out.println(srv.selectBookDBbyID(id)); // id값으로 상세조회 출력
		
	}

	private static void modifyBookDB(Scanner sc, J21_BookDBDAO srv) {
		System.out.println(srv.selectBookDB()); // 전체조회를 다 보여주고
		
		System.out.println(MODMSG1); // 메세지 찍어주고
		String id = sc.next(); // 수정할 id값 입력 받고
		System.out.println(MODMSG2); // 메세지 찍어주고
		J21_BookDBVO bvo = new J21_BookDBVO(sc.next(), sc.next(), sc.next());
		// J20_BookDBVO 에서 받아서 새로운 객체를 생성하고
		
		bvo.setId(id); // bvo에서 id를 추가하고
		if(srv.updateBookDB(bvo)>0) // srv에 bvo에서 받은 것을 업데이트 하고
			System.out.println("성공적으로 수정됨"); // 업데이트 되었으면 수정되었다고 하고
		
	}

	private static void removeBookDB(Scanner sc, J21_BookDBDAO srv) {
		System.out.println(srv.selectBookDB()); // 전체 조회를 다 보여주고
		
		System.out.println(DELMSG); // 메세지 찍어주고
		String id = sc.next(); // 삭제할 id값 입력 받고
		
		if(srv.deleteBookDB(id)>0) // srv에 id를 입력한 것에 대한 내용을 삭제하고
			System.out.println("성공적으로 제거됨"); // 삭제했으면 제거되었다고 함
	}

}	
